{
  "title": "JupyterLab Package Metadata",
  "version": "0.1.0",
  "description": "JupyterLab package.json settings.",
  "definitions": {
    "extension": {
      "type": ["boolean", "string"]
    },
    "relativePath": {
      "type": ["string", "null"]
    },
    "sharedObject": {
      "description": "Modules that should be shared in the share scope. Property names are used to match requested modules in this compilation. Relative requests are resolved, module requests are matched unresolved, absolute paths will match resolved requests.",
      "type": "object",
      "additionalProperties": {
        "description": "Module sharing information.",
        "anyOf": [
          {
            "description": "Module is not shared. A local copy will be bundled and used.",
            "enum": [false]
          },
          {
            "$ref": "#/definitions/sharedConfig"
          }
        ]
      }
    },
    "sharedConfig": {
      "description": "Configuration data for package sharing.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "bundled": {
          "description": "The module will be bundled and provided to the system as a shared module (the system will use the latest bundled version from any extension). This bundled local copy will be used if the system version does not match the requiredVersion. Defaults to true",
          "type": "boolean",
          "default": "true"
        },
        "requiredVersion": {
          "description": "Version requirement from module in share scope. Defaults to the version required in the package.json, or false if the version cannot be determined. You can specify it here in case the version cannot be determined automatically.",
          "anyOf": [
            {
              "description": "No version requirement check.",
              "enum": [false]
            },
            {
              "description": "The semver range required for the shared module.",
              "type": "string"
            }
          ]
        },
        "singleton": {
          "description": "Allow only a single version of the shared module in share scope. Will only use the system provided version, and not fall back to a local bundled copy. Default is false.",
          "type": "boolean",
          "default": "false"
        },
        "strictVersion": {
          "description": "Throw an error (instead of a warning) if the shared module version does not satisfy the requiredVersion. Defaults to false when forced to use the system-provided version of the module (i.e., singleton is true or bundled is false), in which case we will just print a console warning if the system-provided version does not satisfy the requiredVersion. This has no effect if requiredVersion is false.",
          "type": "boolean"
        }
      }
    }
  },
  "properties": {
    "extension": {
      "title": "Extension",
      "description": "Presence of or relative path to a standard JupyterLab extension",
      "$ref": "#/definitions/extension",
      "default": false
    },
    "mimeExtension": {
      "title": "Mime extension",
      "description": "Presence of or relative path to a JupyterLab MIME renderer extension",
      "$ref": "#/definitions/extension",
      "default": false
    },
    "themePath": {
      "title": "Theme path",
      "description": "The relative path to theme files",
      "$ref": "#/definitions/relativePath",
      "default": null
    },
    "schemaDir": {
      "title": "Schema directory",
      "description": "The relative path to schema files",
      "$ref": "#/definitions/relativePath",
      "default": null
    },
    "outputDir": {
      "title": "Output directory",
      "description": "The relative path to the static assets",
      "$ref": "#/definitions/relativePath",
      "default": "static"
    },
    "webpackConfig": {
      "title": "Custom Webpack config",
      "description": "The relative path to a custom webpack config",
      "$ref": "#/definitions/relativePath",
      "default": null
    },
    "sharedPackages": {
      "description": "Modules that should be shared in the share scope. When provided, property names are used to match requested modules in this compilation.",
      "ref": "#/definitions/sharedObject"
    },
    "discovery": {
      "title": "Discovery metadata",
      "description": "Discovery metadata used to for companion packages",
      "type": "object"
    },
    "disabledExtensions": {
      "title": "List of disabled extension modules and/or regex patterns for extension ids",
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false,
  "type": "object"
}
